package compileMetaClass

import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.ast.ConstructorNode
import org.codehaus.groovy.ast.FieldNode
import org.codehaus.groovy.ast.GroovyClassVisitor
import org.codehaus.groovy.ast.MethodNode
import org.codehaus.groovy.ast.PropertyNode
import org.codehaus.groovy.control.SourceUnit
import org.codehaus.groovy.syntax.SyntaxException

/**
 * GroovyClassVisitor: 每个类的类节点,方法节点,访问者实现类都会被调用
 */
class MyClassVisitor implements GroovyClassVisitor {
    SourceUnit sourceUnit
    MyClassVisitor(SourceUnit sourceUnit) {this.sourceUnit = sourceUnit }
    //访问方法
    @Override
    void visitMethod(MethodNode methodNode) {
        if(methodNode.name.size()==1)
            sourceUnit.addError(new SyntaxException("方法名不能用一个字母表示",methodNode.lineNumber,methodNode.columnNumber))
        methodNode.parameters.each {
            if(it.name.size()==1)
                sourceUnit.addError(new SyntaxException("参数名不能用一个字母表示",it.lineNumber,it.columnNumber))
        }
    }
    @Override
    void visitClass(ClassNode classNode) {

    }

    @Override
    void visitConstructor(ConstructorNode constructorNode) {

    }
    @Override
    void visitField(FieldNode fieldNode) {

    }

    @Override
    void visitProperty(PropertyNode propertyNode) {

    }
}
